Skip to content

fix(project): 勾选路径读取端补 null 防御与路径归一化 - #3

Merged
Sam-Fic merged 1 commit into
mainfrom
fix/checked-path-defensive
Nov 10, 2026
Merged

Sam-Fic merged 1 commit into
mainfrom
fix/checked-path-defensive

Conversation

@Sam-Fic

@Sam-Fic Sam-Fic commented Nov 10, 2026

Copy link
Copy Markdown
Owner

背景

PR #2 (8f4f793) 做了 checked_files / checked_entries 字段名兼容, 审查发现两个遗留隐患, 本 PR 补齐:

  1. null 防御: get_string_element 对非字符串元素 (Flet 旧文件可能是对象数组) 返回 null —— cli 端会把 null 收进 checked_paths, project_manager 端 File.new_for_path (null) 触发 G_IS_FILE critical (Flatpak 测试环境 fatal-criticals 下直接 abort)。循环内跳过 null/空串。
  2. 路径归一化: 勾选匹配是字符串精确比较 (path in checked_files), Flet 若写正斜杠或相对路径则勾选依然对不上。读取端经 File.get_path () 归一化到本版规范形态, 相对路径按项目文件的 work_dir 解析。归一化逻辑放 ProjectManager.canonicalize_checked_path 共用, cli 与 GUI 两处加载路径对称。

写入端仍然不动 (只写 checked_files), 与 PR #2 的策略一致。

验证

  • CI 编译 + 全部单元测试
  • 建议合并后用 Flet 版项目文件实测互开

checked_fields 字段名兼容 (8f4f793) 的两个遗留隐患:

- get_string_element 对非字符串元素 (Flet 旧文件可能是对象数组)
  返回 null: cli 端会把 null 收进 checked_paths, project_manager 端
  File.new_for_path (null) 触发 G_IS_FILE critical, 循环内跳过
- 勾选匹配是字符串精确比较 (path in checked_files), Flet 若写
  正斜杠/相对路径则勾选依然对不上: 读取端经 File.get_path ()
  归一化到本版规范形态, 相对路径按 work_dir 解析 (两处对称,
  归一化逻辑放 ProjectManager.canonicalize_checked_path 共用)
@Sam-Fic
Sam-Fic merged commit fe2e5ba into main Nov 10, 2026
7 checks passed
@Sam-Fic
Sam-Fic deleted the fix/checked-path-defensive branch November 10, 2026 17:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant